package spring.boot.redis.service;

import org.redisson.api.RLock;
import org.redisson.api.RReadWriteLock;

import java.util.concurrent.TimeUnit;

public interface RedissonService {

    Boolean set(String key, String value);

    Boolean set(String key, String value, long timeout, TimeUnit timeUnit);

    String get(String key);


    /**
     *     getLock
     *     lock.tryLock(timeout, releaseTime, timeUnit);
     *     lock.unlock();
     * 尝试加锁  https://github.com/redisson/redisson/wiki/8.-%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E5%92%8C%E5%90%8C%E6%AD%A5%E5%99%A8
     * @param key   lock.tryLock(timeout, releaseTime, timeUnit);
     * @param waitTime  尝试加锁，最多等待多久
     * @param releaseTime 上锁以后多久自动解锁
     * @param timeUnit
     */


    /**
     * 可重入锁（Reentrant Lock）
     * @param key
     * @return
     */
    RLock getReentrantLock(String key);

    /**
     * 公平锁（Fair Lock）
     * @param key
     * @return
     */
    RLock fairLock(String key);

    /**
     * 读写锁（ReadWriteLock）
     * // 最常见的使用方法
     * rwlock.readLock().lock();
     * // 或
     * rwlock.writeLock().lock();
     * @param key
     * @return
     */
    RReadWriteLock rwlock (String key);




}
